package com.mumu.muPictureBackend.exception;

import com.mumu.muPictureBackend.common.BaseResponse;
import com.mumu.muPictureBackend.common.ResultUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 全局异常处理器
 */
@RestControllerAdvice//全局异常处理的注解
@Slf4j
public class GlobalExceptionHandler {
    /**
     * BusinessException.class主要是抛出了该异常 那么这里就会捕获到这里 然后封装起来返回给前端 返回的结果更加清晰
     * 比如说登录失败/密码错误我就不手动返回error 我直接抛出异常即可 因为抛出的异常都在这里收集着 然后统一返回error
     * @param e
     * @return
     */
    @ExceptionHandler(BusinessException.class)
    public BaseResponse<?> businessExceptionHandler(BusinessException e) {
        log.error("BusinessException", e);
//        1. BusinessException继承了RunTimeException 它里面有message 所以这个子类可以直接get 它自己有一个成员变量code
        //2. 这里就直接捕捉BusinessException异常到这里 然后getCode还有massage然后封装返回给前端即可
        return ResultUtils.error(e.getCode(), e.getMessage());
    }


    @ExceptionHandler(RuntimeException.class)
    public BaseResponse<?> businessExceptionHandler(RuntimeException e) {
        log.error("RuntimeException", e);
        return ResultUtils.error(ErrorCode.SYSTEM_ERROR, "系统错误");
    }
}
